<!DOCTYPE html>



  


<html class="theme-next pisces use-motion" lang="zh-Hans">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<meta name="theme-color" content="#222">









<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
















  
  
  <link href="/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />







<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css" />

<link href="/css/main.css?v=5.1.4" rel="stylesheet" type="text/css" />


  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=5.1.4">


  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=5.1.4">


  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=5.1.4">


  <link rel="mask-icon" href="/images/logo.svg?v=5.1.4" color="#222">





  <meta name="keywords" content="Hexo, NexT" />










<meta name="description" content="12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210">
<meta property="og:type" content="article">
<meta property="og:title" content="work-attendance">
<meta property="og:url" content="http://smallkk.gitee.io/2018/03/08/work-attendance/index.html">
<meta property="og:site_name" content="Hi , 小坤坤">
<meta property="og:description" content="12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210">
<meta property="og:locale" content="zh-Hans">
<meta property="og:updated_time" content="2018-04-30T19:07:33.321Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="work-attendance">
<meta name="twitter:description" content="12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210">



<script type="text/javascript" id="hexo.configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Pisces',
    version: '5.1.4',
    sidebar: {"position":"left","display":"post","offset":12,"b2t":false,"scrollpercent":false,"onmobile":false},
    fancybox: true,
    tabs: true,
    motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
    duoshuo: {
      userId: '0',
      author: '博主'
    },
    algolia: {
      applicationID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    }
  };
</script>



  <link rel="canonical" href="http://smallkk.gitee.io/2018/03/08/work-attendance/"/>





  <title>work-attendance | Hi , 小坤坤</title>
  








</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">

  
  
    
  

  <div class="container sidebar-position-left page-post-detail">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-wrapper">
  <div class="site-meta ">
    

    <div class="custom-logo-site-title">
      <a href="/"  class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">Hi , 小坤坤</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
      
        <p class="site-subtitle"></p>
      
  </div>

  <div class="site-nav-toggle">
    <button>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
    </button>
  </div>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        <li class="menu-item menu-item-home">
          <a href="/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />
            
            首页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-archives">
          <a href="/archives/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
            
            归档
          </a>
        </li>
      

      
    </ul>
  

  
</nav>



 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  

  
  
  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://smallkk.gitee.io/2018/03/08/work-attendance/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="S-Name Small·kk">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.gif">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Hi , 小坤坤">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">work-attendance</h1>
        

        <div class="post-meta">
          <span class="post-time">
            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">发表于</span>
              
              <time title="创建于" itemprop="dateCreated datePublished" datetime="2018-03-08T09:30:52+08:00">
                2018-03-08
              </time>
            

            

            
          </span>

          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br><span class="line">723</span><br><span class="line">724</span><br><span class="line">725</span><br><span class="line">726</span><br><span class="line">727</span><br><span class="line">728</span><br><span class="line">729</span><br><span class="line">730</span><br><span class="line">731</span><br><span class="line">732</span><br><span class="line">733</span><br><span class="line">734</span><br><span class="line">735</span><br><span class="line">736</span><br><span class="line">737</span><br><span class="line">738</span><br><span class="line">739</span><br><span class="line">740</span><br><span class="line">741</span><br><span class="line">742</span><br><span class="line">743</span><br><span class="line">744</span><br><span class="line">745</span><br><span class="line">746</span><br><span class="line">747</span><br><span class="line">748</span><br><span class="line">749</span><br><span class="line">750</span><br><span class="line">751</span><br><span class="line">752</span><br><span class="line">753</span><br><span class="line">754</span><br><span class="line">755</span><br><span class="line">756</span><br><span class="line">757</span><br><span class="line">758</span><br><span class="line">759</span><br><span class="line">760</span><br><span class="line">761</span><br><span class="line">762</span><br><span class="line">763</span><br><span class="line">764</span><br><span class="line">765</span><br><span class="line">766</span><br><span class="line">767</span><br><span class="line">768</span><br><span class="line">769</span><br><span class="line">770</span><br><span class="line">771</span><br><span class="line">772</span><br><span class="line">773</span><br><span class="line">774</span><br><span class="line">775</span><br><span class="line">776</span><br><span class="line">777</span><br><span class="line">778</span><br><span class="line">779</span><br><span class="line">780</span><br><span class="line">781</span><br><span class="line">782</span><br><span class="line">783</span><br><span class="line">784</span><br><span class="line">785</span><br><span class="line">786</span><br><span class="line">787</span><br><span class="line">788</span><br><span class="line">789</span><br><span class="line">790</span><br><span class="line">791</span><br><span class="line">792</span><br><span class="line">793</span><br><span class="line">794</span><br><span class="line">795</span><br><span class="line">796</span><br><span class="line">797</span><br><span class="line">798</span><br><span class="line">799</span><br><span class="line">800</span><br><span class="line">801</span><br><span class="line">802</span><br><span class="line">803</span><br><span class="line">804</span><br><span class="line">805</span><br><span class="line">806</span><br><span class="line">807</span><br><span class="line">808</span><br><span class="line">809</span><br><span class="line">810</span><br><span class="line">811</span><br><span class="line">812</span><br><span class="line">813</span><br><span class="line">814</span><br><span class="line">815</span><br><span class="line">816</span><br><span class="line">817</span><br><span class="line">818</span><br><span class="line">819</span><br><span class="line">820</span><br><span class="line">821</span><br><span class="line">822</span><br><span class="line">823</span><br><span class="line">824</span><br><span class="line">825</span><br><span class="line">826</span><br><span class="line">827</span><br><span class="line">828</span><br><span class="line">829</span><br><span class="line">830</span><br><span class="line">831</span><br><span class="line">832</span><br><span class="line">833</span><br><span class="line">834</span><br><span class="line">835</span><br><span class="line">836</span><br><span class="line">837</span><br><span class="line">838</span><br><span class="line">839</span><br><span class="line">840</span><br><span class="line">841</span><br><span class="line">842</span><br><span class="line">843</span><br><span class="line">844</span><br><span class="line">845</span><br><span class="line">846</span><br><span class="line">847</span><br><span class="line">848</span><br><span class="line">849</span><br><span class="line">850</span><br><span class="line">851</span><br><span class="line">852</span><br><span class="line">853</span><br><span class="line">854</span><br><span class="line">855</span><br><span class="line">856</span><br><span class="line">857</span><br><span class="line">858</span><br><span class="line">859</span><br><span class="line">860</span><br><span class="line">861</span><br><span class="line">862</span><br><span class="line">863</span><br><span class="line">864</span><br><span class="line">865</span><br><span class="line">866</span><br><span class="line">867</span><br><span class="line">868</span><br><span class="line">869</span><br><span class="line">870</span><br><span class="line">871</span><br><span class="line">872</span><br><span class="line">873</span><br><span class="line">874</span><br><span class="line">875</span><br><span class="line">876</span><br><span class="line">877</span><br><span class="line">878</span><br><span class="line">879</span><br><span class="line">880</span><br><span class="line">881</span><br><span class="line">882</span><br><span class="line">883</span><br><span class="line">884</span><br><span class="line">885</span><br><span class="line">886</span><br><span class="line">887</span><br><span class="line">888</span><br><span class="line">889</span><br><span class="line">890</span><br><span class="line">891</span><br><span class="line">892</span><br><span class="line">893</span><br><span class="line">894</span><br><span class="line">895</span><br><span class="line">896</span><br><span class="line">897</span><br><span class="line">898</span><br><span class="line">899</span><br><span class="line">900</span><br><span class="line">901</span><br><span class="line">902</span><br><span class="line">903</span><br><span class="line">904</span><br><span class="line">905</span><br><span class="line">906</span><br><span class="line">907</span><br><span class="line">908</span><br><span class="line">909</span><br><span class="line">910</span><br><span class="line">911</span><br><span class="line">912</span><br><span class="line">913</span><br><span class="line">914</span><br><span class="line">915</span><br><span class="line">916</span><br><span class="line">917</span><br><span class="line">918</span><br><span class="line">919</span><br><span class="line">920</span><br><span class="line">921</span><br><span class="line">922</span><br><span class="line">923</span><br><span class="line">924</span><br><span class="line">925</span><br><span class="line">926</span><br><span class="line">927</span><br><span class="line">928</span><br><span class="line">929</span><br><span class="line">930</span><br><span class="line">931</span><br><span class="line">932</span><br><span class="line">933</span><br><span class="line">934</span><br><span class="line">935</span><br><span class="line">936</span><br><span class="line">937</span><br><span class="line">938</span><br><span class="line">939</span><br><span class="line">940</span><br><span class="line">941</span><br><span class="line">942</span><br><span class="line">943</span><br><span class="line">944</span><br><span class="line">945</span><br><span class="line">946</span><br><span class="line">947</span><br><span class="line">948</span><br><span class="line">949</span><br><span class="line">950</span><br><span class="line">951</span><br><span class="line">952</span><br><span class="line">953</span><br><span class="line">954</span><br><span class="line">955</span><br><span class="line">956</span><br><span class="line">957</span><br><span class="line">958</span><br><span class="line">959</span><br><span class="line">960</span><br><span class="line">961</span><br><span class="line">962</span><br><span class="line">963</span><br><span class="line">964</span><br><span class="line">965</span><br><span class="line">966</span><br><span class="line">967</span><br><span class="line">968</span><br><span class="line">969</span><br><span class="line">970</span><br><span class="line">971</span><br><span class="line">972</span><br><span class="line">973</span><br><span class="line">974</span><br><span class="line">975</span><br><span class="line">976</span><br><span class="line">977</span><br><span class="line">978</span><br><span class="line">979</span><br><span class="line">980</span><br><span class="line">981</span><br><span class="line">982</span><br><span class="line">983</span><br><span class="line">984</span><br><span class="line">985</span><br><span class="line">986</span><br><span class="line">987</span><br><span class="line">988</span><br><span class="line">989</span><br><span class="line">990</span><br><span class="line">991</span><br><span class="line">992</span><br><span class="line">993</span><br><span class="line">994</span><br><span class="line">995</span><br><span class="line">996</span><br><span class="line">997</span><br><span class="line">998</span><br><span class="line">999</span><br><span class="line">1000</span><br><span class="line">1001</span><br><span class="line">1002</span><br><span class="line">1003</span><br><span class="line">1004</span><br><span class="line">1005</span><br><span class="line">1006</span><br><span class="line">1007</span><br><span class="line">1008</span><br><span class="line">1009</span><br><span class="line">1010</span><br><span class="line">1011</span><br><span class="line">1012</span><br><span class="line">1013</span><br><span class="line">1014</span><br><span class="line">1015</span><br><span class="line">1016</span><br><span class="line">1017</span><br><span class="line">1018</span><br><span class="line">1019</span><br><span class="line">1020</span><br><span class="line">1021</span><br><span class="line">1022</span><br><span class="line">1023</span><br><span class="line">1024</span><br><span class="line">1025</span><br><span class="line">1026</span><br><span class="line">1027</span><br><span class="line">1028</span><br><span class="line">1029</span><br><span class="line">1030</span><br><span class="line">1031</span><br><span class="line">1032</span><br><span class="line">1033</span><br><span class="line">1034</span><br><span class="line">1035</span><br><span class="line">1036</span><br><span class="line">1037</span><br><span class="line">1038</span><br><span class="line">1039</span><br><span class="line">1040</span><br><span class="line">1041</span><br><span class="line">1042</span><br><span class="line">1043</span><br><span class="line">1044</span><br><span class="line">1045</span><br><span class="line">1046</span><br><span class="line">1047</span><br><span class="line">1048</span><br><span class="line">1049</span><br><span class="line">1050</span><br><span class="line">1051</span><br><span class="line">1052</span><br><span class="line">1053</span><br><span class="line">1054</span><br><span class="line">1055</span><br><span class="line">1056</span><br><span class="line">1057</span><br><span class="line">1058</span><br><span class="line">1059</span><br><span class="line">1060</span><br><span class="line">1061</span><br><span class="line">1062</span><br><span class="line">1063</span><br><span class="line">1064</span><br><span class="line">1065</span><br><span class="line">1066</span><br><span class="line">1067</span><br><span class="line">1068</span><br><span class="line">1069</span><br><span class="line">1070</span><br><span class="line">1071</span><br><span class="line">1072</span><br><span class="line">1073</span><br><span class="line">1074</span><br><span class="line">1075</span><br><span class="line">1076</span><br><span class="line">1077</span><br><span class="line">1078</span><br><span class="line">1079</span><br><span class="line">1080</span><br><span class="line">1081</span><br><span class="line">1082</span><br><span class="line">1083</span><br><span class="line">1084</span><br><span class="line">1085</span><br><span class="line">1086</span><br><span class="line">1087</span><br><span class="line">1088</span><br><span class="line">1089</span><br><span class="line">1090</span><br><span class="line">1091</span><br><span class="line">1092</span><br><span class="line">1093</span><br><span class="line">1094</span><br><span class="line">1095</span><br><span class="line">1096</span><br><span class="line">1097</span><br><span class="line">1098</span><br><span class="line">1099</span><br><span class="line">1100</span><br><span class="line">1101</span><br><span class="line">1102</span><br><span class="line">1103</span><br><span class="line">1104</span><br><span class="line">1105</span><br><span class="line">1106</span><br><span class="line">1107</span><br><span class="line">1108</span><br><span class="line">1109</span><br><span class="line">1110</span><br><span class="line">1111</span><br><span class="line">1112</span><br><span class="line">1113</span><br><span class="line">1114</span><br><span class="line">1115</span><br><span class="line">1116</span><br><span class="line">1117</span><br><span class="line">1118</span><br><span class="line">1119</span><br><span class="line">1120</span><br><span class="line">1121</span><br><span class="line">1122</span><br><span class="line">1123</span><br><span class="line">1124</span><br><span class="line">1125</span><br><span class="line">1126</span><br><span class="line">1127</span><br><span class="line">1128</span><br><span class="line">1129</span><br><span class="line">1130</span><br><span class="line">1131</span><br><span class="line">1132</span><br><span class="line">1133</span><br><span class="line">1134</span><br><span class="line">1135</span><br><span class="line">1136</span><br><span class="line">1137</span><br><span class="line">1138</span><br><span class="line">1139</span><br><span class="line">1140</span><br><span class="line">1141</span><br><span class="line">1142</span><br><span class="line">1143</span><br><span class="line">1144</span><br><span class="line">1145</span><br><span class="line">1146</span><br><span class="line">1147</span><br><span class="line">1148</span><br><span class="line">1149</span><br><span class="line">1150</span><br><span class="line">1151</span><br><span class="line">1152</span><br><span class="line">1153</span><br><span class="line">1154</span><br><span class="line">1155</span><br><span class="line">1156</span><br><span class="line">1157</span><br><span class="line">1158</span><br><span class="line">1159</span><br><span class="line">1160</span><br><span class="line">1161</span><br><span class="line">1162</span><br><span class="line">1163</span><br><span class="line">1164</span><br><span class="line">1165</span><br><span class="line">1166</span><br><span class="line">1167</span><br><span class="line">1168</span><br><span class="line">1169</span><br><span class="line">1170</span><br><span class="line">1171</span><br><span class="line">1172</span><br><span class="line">1173</span><br><span class="line">1174</span><br><span class="line">1175</span><br><span class="line">1176</span><br><span class="line">1177</span><br><span class="line">1178</span><br><span class="line">1179</span><br><span class="line">1180</span><br><span class="line">1181</span><br><span class="line">1182</span><br><span class="line">1183</span><br><span class="line">1184</span><br><span class="line">1185</span><br><span class="line">1186</span><br><span class="line">1187</span><br><span class="line">1188</span><br><span class="line">1189</span><br><span class="line">1190</span><br><span class="line">1191</span><br><span class="line">1192</span><br><span class="line">1193</span><br><span class="line">1194</span><br><span class="line">1195</span><br><span class="line">1196</span><br><span class="line">1197</span><br><span class="line">1198</span><br><span class="line">1199</span><br><span class="line">1200</span><br><span class="line">1201</span><br><span class="line">1202</span><br><span class="line">1203</span><br><span class="line">1204</span><br><span class="line">1205</span><br><span class="line">1206</span><br><span class="line">1207</span><br><span class="line">1208</span><br><span class="line">1209</span><br><span class="line">1210</span><br><span class="line">1211</span><br><span class="line">1212</span><br><span class="line">1213</span><br><span class="line">1214</span><br><span class="line">1215</span><br><span class="line">1216</span><br><span class="line">1217</span><br><span class="line">1218</span><br><span class="line">1219</span><br><span class="line">1220</span><br><span class="line">1221</span><br><span class="line">1222</span><br><span class="line">1223</span><br><span class="line">1224</span><br><span class="line">1225</span><br><span class="line">1226</span><br><span class="line">1227</span><br><span class="line">1228</span><br><span class="line">1229</span><br><span class="line">1230</span><br><span class="line">1231</span><br><span class="line">1232</span><br><span class="line">1233</span><br><span class="line">1234</span><br><span class="line">1235</span><br><span class="line">1236</span><br><span class="line">1237</span><br><span class="line">1238</span><br><span class="line">1239</span><br><span class="line">1240</span><br><span class="line">1241</span><br></pre></td><td class="code"><pre><span class="line">/**************************************spring-cfg *********************************************/</span><br><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><br><span class="line">&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;</span><br><span class="line">       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><br><span class="line">       xmlns:context=&quot;http://www.springframework.org/schema/context&quot;</span><br><span class="line">       xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot;</span><br><span class="line">       xmlns:tx=&quot;http://www.springframework.org/schema/tx&quot;</span><br><span class="line">       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans</span><br><span class="line">    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd</span><br><span class="line">    http://www.springframework.org/schema/context</span><br><span class="line">    http://www.springframework.org/schema/context/spring-context-4.0.xsd</span><br><span class="line">    http://www.springframework.org/schema/aop</span><br><span class="line">    http://www.springframework.org/schema/aop/spring-aop-4.0.xsd</span><br><span class="line">    http://www.springframework.org/schema/tx</span><br><span class="line">    http://www.springframework.org/schema/tx/spring-tx-4.0.xsd&quot;&gt;</span><br><span class="line">    &lt;!--开启切面编程自动代理--&gt;</span><br><span class="line">    &lt;aop:aspectj-autoproxy proxy-target-class=&quot;true&quot;/&gt;</span><br><span class="line">    &lt;!--开启注解支持生成bean--&gt;</span><br><span class="line">    &lt;context:annotation-config/&gt;</span><br><span class="line">    &lt;!--基本包扫描路径--&gt;</span><br><span class="line">    &lt;context:component-scan base-package=&quot;com.smallkk&quot;/&gt;</span><br><span class="line">    &lt;!--整合Mybatis--&gt;</span><br><span class="line">    &lt;bean id=&quot;sqlSessionFactory&quot; class=&quot;org.mybatis.spring.SqlSessionFactoryBean&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;dataSource&quot; ref=&quot;dataSource&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;mapperLocations&quot; value=&quot;classpath:com/smallkk/**/*.xml&quot;/&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!-- Mapper的接口扫描--&gt;</span><br><span class="line">    &lt;bean class=&quot;org.mybatis.spring.mapper.MapperScannerConfigurer&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;basePackage&quot; value=&quot;com.smallkk.*.dao&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;sqlSessionFactoryBeanName&quot; value=&quot;sqlSessionFactory&quot;/&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!--事务声明--&gt;</span><br><span class="line">    &lt;tx:annotation-driven transaction-manager=&quot;transactionManager&quot;/&gt;</span><br><span class="line">    &lt;bean id=&quot;transactionManager&quot; class=&quot;org.springframework.jdbc.datasource.DataSourceTransactionManager&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;dataSource&quot; ref=&quot;dataSource&quot;/&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!--数据源--&gt;</span><br><span class="line">    &lt;context:property-placeholder location=&quot;classpath:jdbc.properties&quot;/&gt;</span><br><span class="line">    &lt;bean id=&quot;dataSource&quot; class=&quot;com.alibaba.druid.pool.DruidDataSource&quot; destroy-method=&quot;close&quot; init-method=&quot;init&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;url&quot; value=&quot;$&#123;jdbc_url&#125;&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;username&quot; value=&quot;$&#123;jdbc_username&#125;&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;password&quot; value=&quot;$&#123;jdbc_password&#125;&quot;/&gt;</span><br><span class="line">        &lt;!-- 初始化连接大小 --&gt;</span><br><span class="line">        &lt;property name=&quot;initialSize&quot; value=&quot;0&quot;/&gt;</span><br><span class="line">        &lt;!-- 连接池最大使用连接数量 --&gt;</span><br><span class="line">        &lt;property name=&quot;maxActive&quot; value=&quot;20&quot;/&gt;</span><br><span class="line">        &lt;!-- 连接池最小空闲 --&gt;</span><br><span class="line">        &lt;property name=&quot;minIdle&quot; value=&quot;0&quot;/&gt;</span><br><span class="line">        &lt;!-- 获取连接最大等待时间 --&gt;</span><br><span class="line">        &lt;property name=&quot;maxWait&quot; value=&quot;60000&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;validationQuery&quot; value=&quot;$&#123;validationQuery&#125;&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;testOnBorrow&quot; value=&quot;false&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;testOnReturn&quot; value=&quot;false&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;testWhileIdle&quot; value=&quot;true&quot;/&gt;</span><br><span class="line">        &lt;!-- 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 --&gt;</span><br><span class="line">        &lt;property name=&quot;timeBetweenEvictionRunsMillis&quot; value=&quot;60000&quot;/&gt;</span><br><span class="line">        &lt;!-- 配置一个连接在池中最小生存的时间，单位是毫秒 --&gt;</span><br><span class="line">        &lt;property name=&quot;minEvictableIdleTimeMillis&quot; value=&quot;25200000&quot;/&gt;</span><br><span class="line">        &lt;!-- 打开removeAbandoned功能 --&gt;</span><br><span class="line">        &lt;property name=&quot;removeAbandoned&quot; value=&quot;true&quot;/&gt;</span><br><span class="line">        &lt;!-- 1800秒，也就是30分钟 --&gt;</span><br><span class="line">        &lt;property name=&quot;removeAbandonedTimeout&quot; value=&quot;1800&quot;/&gt;</span><br><span class="line">        &lt;!-- 关闭abanded连接时输出错误日志 --&gt;</span><br><span class="line">        &lt;property name=&quot;logAbandoned&quot; value=&quot;true&quot;/&gt;</span><br><span class="line">        &lt;!-- 监控数据库 --&gt;</span><br><span class="line">        &lt;!-- &lt;property name=&quot;filters&quot; value=&quot;stat&quot; /&gt; --&gt;</span><br><span class="line">        &lt;property name=&quot;filters&quot; value=&quot;mergeStat&quot;/&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!--流程引擎配置项--&gt;</span><br><span class="line">    &lt;bean id=&quot;processEngineConfiguration&quot; class=&quot;org.activiti.spring.SpringProcessEngineConfiguration&quot;&gt;</span><br><span class="line">        &lt;!--数据源 和系统同一个--&gt;</span><br><span class="line">        &lt;property name=&quot;dataSource&quot; ref=&quot;dataSource&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;transactionManager&quot; ref=&quot;transactionManager&quot;/&gt;</span><br><span class="line">        &lt;!--更新数据库表 如果没有 则创建--&gt;</span><br><span class="line">        &lt;property name=&quot;databaseSchemaUpdate&quot; value=&quot;true&quot;/&gt;</span><br><span class="line">        &lt;!-- 是否启动jobExecutor --&gt;</span><br><span class="line">        &lt;property name=&quot;jobExecutorActivate&quot; value=&quot;false&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;activityFontName&quot; value=&quot;宋体&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;labelFontName&quot; value=&quot;宋体&quot;/&gt;</span><br><span class="line">        &lt;!--自动部署流程--&gt;</span><br><span class="line">        &lt;property name=&quot;deploymentResources&quot;&gt;</span><br><span class="line">            &lt;list&gt;</span><br><span class="line">                &lt;value&gt;classpath*:workflow/re_attend.bpmn&lt;/value&gt;</span><br><span class="line">            &lt;/list&gt;</span><br><span class="line">        &lt;/property&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!--流程引擎--&gt;</span><br><span class="line">    &lt;bean id=&quot;processEngine&quot; class=&quot;org.activiti.spring.ProcessEngineFactoryBean&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;processEngineConfiguration&quot; ref=&quot;processEngineConfiguration&quot;/&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!-- 工作流数据存储服务 --&gt;</span><br><span class="line">    &lt;bean id=&quot;repositoryService&quot; factory-bean=&quot;processEngine&quot; factory-method=&quot;getRepositoryService&quot;/&gt;</span><br><span class="line">    &lt;!-- 工作流运行时服务 --&gt;</span><br><span class="line">    &lt;bean id=&quot;runtimeService&quot; factory-bean=&quot;processEngine&quot; factory-method=&quot;getRuntimeService&quot;/&gt;</span><br><span class="line">    &lt;!--  工作流任务服务--&gt;</span><br><span class="line">    &lt;bean id=&quot;taskService&quot; factory-bean=&quot;processEngine&quot; factory-method=&quot;getTaskService&quot;/&gt;</span><br><span class="line">    &lt;!--  工作流历史数据服务--&gt;</span><br><span class="line">    &lt;bean id=&quot;historyService&quot; factory-bean=&quot;processEngine&quot; factory-method=&quot;getHistoryService&quot;/&gt;</span><br><span class="line">    &lt;!--  工作流管理服务--&gt;</span><br><span class="line">    &lt;bean id=&quot;managementService&quot; factory-bean=&quot;processEngine&quot; factory-method=&quot;getManagementService&quot;/&gt;</span><br><span class="line">    &lt;!-- 工作流身份识别服务 --&gt;</span><br><span class="line">    &lt;bean id=&quot;IdentityService&quot; factory-bean=&quot;processEngine&quot; factory-method=&quot;getIdentityService&quot;/&gt;</span><br><span class="line">    &lt;!--将Quartz导入到spring-cfg才能够启动--&gt;</span><br><span class="line">    &lt;import resource=&quot;spring-job.xml&quot;/&gt;</span><br><span class="line">    &lt;!--导入Shiro--&gt;</span><br><span class="line">    &lt;import resource=&quot;spring-shiro.xml&quot;/&gt;</span><br><span class="line">&lt;/beans&gt;</span><br><span class="line">/***************************************spring-mvc *********************************************/</span><br><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><br><span class="line">&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;</span><br><span class="line">       xmlns:context=&quot;http://www.springframework.org/schema/context&quot;</span><br><span class="line">       xmlns:mvc=&quot;http://www.springframework.org/schema/mvc&quot;</span><br><span class="line">       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><br><span class="line">       xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot;</span><br><span class="line">       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans</span><br><span class="line">      http://www.springframework.org/schema/beans/spring-beans-4.0.xsd</span><br><span class="line">      http://www.springframework.org/schema/context</span><br><span class="line">      http://www.springframework.org/schema/context/spring-context.xsd</span><br><span class="line">      http://www.springframework.org/schema/mvc</span><br><span class="line">      http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd</span><br><span class="line">      http://www.springframework.org/schema/aop</span><br><span class="line">      http://www.springframework.org/schema/aop/spring-aop.xsd&quot;&gt;</span><br><span class="line">    &lt;!--开启切面编程自动代理       权限注解    基于Controller 的注解  --&gt;</span><br><span class="line">    &lt;aop:aspectj-autoproxy proxy-target-class=&quot;true&quot;/&gt;</span><br><span class="line">    &lt;bean class=&quot;org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;securityManager&quot; ref=&quot;securityManager&quot;/&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!--                         配置json                       --&gt;</span><br><span class="line">    &lt;mvc:annotation-driven&gt;</span><br><span class="line">        &lt;mvc:message-converters&gt;</span><br><span class="line">            &lt;!--匹配到字符串就好--&gt;</span><br><span class="line">            &lt;bean class=&quot;org.springframework.http.converter.StringHttpMessageConverter&quot;/&gt;</span><br><span class="line">            &lt;!--json--&gt;</span><br><span class="line">            &lt;bean class=&quot;com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter&quot;&gt;</span><br><span class="line">                &lt;property name=&quot;supportedMediaTypes&quot;&gt;</span><br><span class="line">                    &lt;list&gt;</span><br><span class="line">                        &lt;value&gt;text/html;charset=UTF-8&lt;/value&gt;</span><br><span class="line">                        &lt;value&gt;application/json;charset=UTF-8&lt;/value&gt;</span><br><span class="line">                    &lt;/list&gt;</span><br><span class="line">                &lt;/property&gt;</span><br><span class="line">            &lt;/bean&gt;</span><br><span class="line">        &lt;/mvc:message-converters&gt;</span><br><span class="line">    &lt;/mvc:annotation-driven&gt;</span><br><span class="line">    &lt;!--包扫描--&gt;</span><br><span class="line">    &lt;context:component-scan base-package=&quot;com.smallkk.*.controller&quot;&gt;</span><br><span class="line">        &lt;!--&lt;context:component-scan base-package=&quot;com.smallkk.*.controller&quot;&gt;   上下这两个都可以：排除service或者只扫描controller--&gt;</span><br><span class="line">        &lt;!--&lt;context:exclude-filter type=&quot;annotation&quot; expression=&quot;org.springframework.stereotype.Service&quot;/&gt;--&gt;</span><br><span class="line">    &lt;/context:component-scan&gt;</span><br><span class="line">    &lt;!--开启MVC注解 主要扫描：@Controller--&gt;</span><br><span class="line">    &lt;mvc:annotation-driven/&gt;</span><br><span class="line">    &lt;!--处理静态资源--&gt;&lt;!--加载静态资源--&gt;     &lt;!--web.xml里面配置了这个default拦截的资源--&gt;</span><br><span class="line">    &lt;mvc:default-servlet-handler/&gt;</span><br><span class="line">    &lt;!--配置拦截器--&gt;</span><br><span class="line">    &lt;mvc:interceptors&gt;</span><br><span class="line">        &lt;bean class=&quot;com.smallkk.common.interceptor.SessionInterceptor&quot;&gt;</span><br><span class="line">        &lt;/bean&gt;</span><br><span class="line">    &lt;/mvc:interceptors&gt;</span><br><span class="line">    &lt;!--前端模板 此处是Velocity 视图解析器--&gt;</span><br><span class="line">    &lt;bean class=&quot;org.springframework.web.servlet.view.velocity.VelocityViewResolver&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;suffix&quot; value=&quot;.vm&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;contentType&quot; value=&quot;text/html;charset=utf-8&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;dateToolAttribute&quot; value=&quot;date&quot;/&gt; &lt;!--日期函数--&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!--Velocity配置--&gt;</span><br><span class="line">    &lt;bean id=&quot;velocityConfigurer&quot; class=&quot;org.springframework.web.servlet.view.velocity.VelocityConfigurer&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;resourceLoaderPath&quot; value=&quot;/WEB-INF/views&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;velocityProperties&quot;&gt;</span><br><span class="line">            &lt;!--Velocity的子配置项--&gt;</span><br><span class="line">            &lt;props&gt;</span><br><span class="line">                &lt;prop key=&quot;input.encoding&quot;&gt;utf-8&lt;/prop&gt;</span><br><span class="line">                &lt;prop key=&quot;output.encoding&quot;&gt;utf-8&lt;/prop&gt;</span><br><span class="line">                &lt;prop key=&quot;file.resource.loader.cache&quot;&gt;false&lt;/prop&gt;</span><br><span class="line">                &lt;prop key=&quot;file.resource.loader.modificationCheckInterval&quot;&gt;1&lt;/prop&gt;</span><br><span class="line">                &lt;prop key=&quot;velocimacro.library.autoreload&quot;&gt;false&lt;/prop&gt;</span><br><span class="line">            &lt;/props&gt;</span><br><span class="line">        &lt;/property&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!--配置上传下载--&gt;</span><br><span class="line">    &lt;bean id=&quot;multipartResolver&quot; class=&quot;org.springframework.web.multipart.commons.CommonsMultipartResolver&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;maxUploadSize&quot; value=&quot;50000&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;maxInMemorySize&quot; value=&quot;50000&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;defaultEncoding&quot; value=&quot;utf-8&quot;/&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!--错误配置--&gt;</span><br><span class="line">    &lt;bean class=&quot;org.springframework.web.servlet.handler.SimpleMappingExceptionResolver&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;exceptionMappings&quot;&gt;</span><br><span class="line">            &lt;props&gt;</span><br><span class="line">                &lt;prop key=&quot;org.apache.shiro.authz.UnauthorizedException&quot;&gt;403&lt;/prop&gt;</span><br><span class="line">            &lt;/props&gt;</span><br><span class="line">        &lt;/property&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">&lt;/beans&gt;</span><br><span class="line"></span><br><span class="line">/**************************************spring-shiro *******************************************/</span><br><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><br><span class="line">&lt;beans xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><br><span class="line">       xmlns=&quot;http://www.springframework.org/schema/beans&quot;</span><br><span class="line">       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans</span><br><span class="line">	http://www.springframework.org/schema/beans/spring-beans-4.0.xsd&quot;&gt;</span><br><span class="line">    &lt;!-- 继承自AuthorizingRealm的自定义Realm,即指定Shiro验证用户登录 --&gt;</span><br><span class="line">    &lt;bean id=&quot;myRealm&quot; class=&quot;com.smallkk.common.security.MyRealm&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;credentialsMatcher&quot; ref=&quot;passwordMatcher&quot;/&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;bean id=&quot;passwordMatcher&quot; class=&quot;com.smallkk.common.security.CustomCredentialsMatcher&quot;/&gt;</span><br><span class="line">    &lt;!-- Shiro默认会使用Servlet容器的Session,可通过sessionMode属性来指定使用Shiro原生Session --&gt;</span><br><span class="line">    &lt;!-- 即&lt;property name=&quot;sessionMode&quot; value=&quot;native&quot;/&gt;,详细说明见官方文档 --&gt;</span><br><span class="line">    &lt;!-- 这里主要是设置自定义的单Realm应用,若有多个Realm,可使用&apos;realms&apos;属性代替 --&gt;</span><br><span class="line">    &lt;bean id=&quot;securityManager&quot; class=&quot;org.apache.shiro.web.mgt.DefaultWebSecurityManager&quot;&gt;</span><br><span class="line">        &lt;property name=&quot;realm&quot; ref=&quot;myRealm&quot;/&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!-- Shiro主过滤器本身功能十分强大,其强大之处就在于它支持任何基于URL路径表达式的、自定义的过滤器的执行 --&gt;</span><br><span class="line">    &lt;!-- Web应用中,Shiro可控制的Web请求必须经过Shiro主过滤器的拦截,Shiro对基于Spring的Web应用提供了完美的支持 --&gt;</span><br><span class="line">    &lt;bean id=&quot;shiroFilter&quot; class=&quot;org.apache.shiro.spring.web.ShiroFilterFactoryBean&quot;&gt;</span><br><span class="line">        &lt;!-- Shiro的核心安全接口,这个属性是必须的 --&gt;</span><br><span class="line">        &lt;property name=&quot;securityManager&quot; ref=&quot;securityManager&quot;/&gt;</span><br><span class="line">        &lt;!-- 要求登录时的链接(可根据项目的URL进行替换),非必须的属性,默认会自动寻找Web工程根目录下的&quot;/login.jsp&quot;页面 --&gt;</span><br><span class="line">        &lt;property name=&quot;loginUrl&quot; value=&quot;/login&quot;/&gt;</span><br><span class="line">        &lt;!-- 登录成功后要跳转的连接(本例中此属性用不到,因为登录成功后的处理逻辑在LoginController里硬编码为main.jsp了) --&gt;</span><br><span class="line">        &lt;!-- &lt;property name=&quot;successUrl&quot; value=&quot;/system/main&quot;/&gt; --&gt;</span><br><span class="line">        &lt;!-- 用户访问未对其授权的资源时,所显示的连接 --&gt;</span><br><span class="line">        &lt;!-- 若想更明显的测试此属性可以修改它的值,如unauthor.jsp,然后用[玄玉]登录后访问/admin/listUser.jsp就看见浏览器会显示unauthor.jsp --&gt;</span><br><span class="line">        &lt;!--&lt;property name=&quot;unauthorizedUrl&quot; value=&quot;/error/403.html&quot;/&gt;--&gt;</span><br><span class="line">        &lt;!-- Shiro连接约束配置,即过滤链的定义 --&gt;</span><br><span class="line">        &lt;!-- 此处可配合我的这篇文章来理解各个过滤连的作用http://blog.csdn.net/jadyer/article/details/12172839 --&gt;</span><br><span class="line">        &lt;!-- 下面value值的第一个&apos;/&apos;代表的路径是相对于HttpServletRequest.getContextPath()的值来的 --&gt;</span><br><span class="line">        &lt;!-- anon：它对应的过滤器里面是空的,什么都没做,这里.do和.jsp后面的*表示参数,比方说login.jsp?main这种 --&gt;</span><br><span class="line">        &lt;!-- authc：该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter --&gt;</span><br><span class="line">        &lt;property name=&quot;filterChainDefinitions&quot;&gt;</span><br><span class="line">            &lt;value&gt;</span><br><span class="line">                /static/**=anon</span><br><span class="line">                /login=anon</span><br><span class="line">                &lt;!--/user/userinfo=authc--&gt;</span><br><span class="line">                /user/userinfo=anon</span><br><span class="line">            &lt;/value&gt;</span><br><span class="line">        &lt;/property&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!-- 保证实现了Shiro内部lifecycle函数的bean执行 --&gt;</span><br><span class="line">    &lt;bean id=&quot;lifecycleBeanPostProcessor&quot; class=&quot;org.apache.shiro.spring.LifecycleBeanPostProcessor&quot;/&gt;</span><br><span class="line">&lt;/beans&gt;</span><br><span class="line">/*************************************spring-job **********************************************/</span><br><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><br><span class="line">&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;</span><br><span class="line">       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><br><span class="line">       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans</span><br><span class="line">      http://www.springframework.org/schema/beans/spring-beans-4.0.xsd&quot;&gt;</span><br><span class="line">    &lt;bean id=&quot;taskJob&quot; class=&quot;com.smallkk.common.task.AttendCheckTask&quot;/&gt;</span><br><span class="line">    &lt;!--quartz  任务调度框架--&gt;</span><br><span class="line">    &lt;bean id=&quot;jobDetail&quot; class=&quot;org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&quot;&gt;</span><br><span class="line">        &lt;!--要执行哪一个类--&gt;</span><br><span class="line">        &lt;property name=&quot;targetObject&quot; ref=&quot;taskJob&quot;/&gt;</span><br><span class="line">        &lt;!--要执行哪一个方法--&gt;</span><br><span class="line">        &lt;property name=&quot;targetMethod&quot; value=&quot;checkAttend&quot;/&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!--触发的时机和条件--&gt;</span><br><span class="line">    &lt;bean id=&quot;attendCheck&quot; class=&quot;org.springframework.scheduling.quartz.CronTriggerFactoryBean&quot;&gt;</span><br><span class="line">        &lt;!--参考上面提到执行哪个类哪个方法的bean--&gt;</span><br><span class="line">        &lt;property name=&quot;jobDetail&quot; ref=&quot;jobDetail&quot;/&gt;</span><br><span class="line">        &lt;property name=&quot;cronExpression&quot;&gt;</span><br><span class="line">            &lt;value&gt;0/30 * * * * ?&lt;/value&gt;</span><br><span class="line">        &lt;/property&gt;</span><br><span class="line">        &lt;!-- 集群支持 Quartz有一套数据库表,还有个properties配置文件     这样就能够感知集群问题;多个tomcat的情况下一个执行了quartz,另一个就看情况执行--&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">    &lt;!--调度工厂--&gt;</span><br><span class="line">    &lt;bean id=&quot;scheduler&quot; class=&quot;org.springframework.scheduling.quartz.SchedulerFactoryBean&quot;&gt;</span><br><span class="line">        &lt;!--有很多的任务trigger--&gt;</span><br><span class="line">        &lt;property name=&quot;triggers&quot;&gt;</span><br><span class="line">            &lt;list&gt;</span><br><span class="line">                &lt;ref bean=&quot;attendCheck&quot;/&gt;</span><br><span class="line">            &lt;/list&gt;</span><br><span class="line">        &lt;/property&gt;</span><br><span class="line">    &lt;/bean&gt;</span><br><span class="line">&lt;/beans&gt;</span><br><span class="line">/***************************************MyRealm ************************************************/</span><br><span class="line">package com.smallkk.common.security;</span><br><span class="line">import com.smallkk.user.entity.Permission;</span><br><span class="line">import com.smallkk.user.entity.Role;</span><br><span class="line">import com.smallkk.user.entity.User;</span><br><span class="line">import com.smallkk.user.service.UserService;</span><br><span class="line">import org.apache.shiro.SecurityUtils;</span><br><span class="line">import org.apache.shiro.authc.*;</span><br><span class="line">import org.apache.shiro.authz.AuthorizationInfo;</span><br><span class="line">import org.apache.shiro.authz.SimpleAuthorizationInfo;</span><br><span class="line">import org.apache.shiro.realm.AuthorizingRealm;</span><br><span class="line">import org.apache.shiro.subject.PrincipalCollection;</span><br><span class="line">import org.springframework.beans.factory.annotation.Autowired;</span><br><span class="line">/**</span><br><span class="line"> * Created By  醉美柳舞之众星捧月</span><br><span class="line"> * @author song</span><br><span class="line"> * @date 2017/10/31 13:49</span><br><span class="line"> */</span><br><span class="line">public class MyRealm extends AuthorizingRealm &#123;</span><br><span class="line">    @Autowired</span><br><span class="line">    private UserService userService;</span><br><span class="line">    /**</span><br><span class="line">     * 授权</span><br><span class="line">     * @param principalCollection</span><br><span class="line">     * @return</span><br><span class="line">     */</span><br><span class="line">    @Override</span><br><span class="line">    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) &#123;</span><br><span class="line">        String username = (String) principalCollection.getPrimaryPrincipal();</span><br><span class="line">        User user = userService.findUserByUserName(username);</span><br><span class="line">        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();</span><br><span class="line">        for (Role role : user.getRoleList()) &#123;</span><br><span class="line">            authorizationInfo.addRole(role.getRole());</span><br><span class="line">            for (Permission permission : role.getPermissionList()) &#123;</span><br><span class="line">                authorizationInfo.addStringPermission(permission.getPermission());</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        return authorizationInfo;</span><br><span class="line">    &#125;</span><br><span class="line">    /**</span><br><span class="line">     * 认证 登录</span><br><span class="line">     * @param authenticationToken</span><br><span class="line">     * @return</span><br><span class="line">     * @throws AuthenticationException</span><br><span class="line">     */</span><br><span class="line">    @Override</span><br><span class="line">    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException &#123;</span><br><span class="line">        UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authenticationToken;</span><br><span class="line">        String username = usernamePasswordToken.getUsername();</span><br><span class="line">        User user = userService.findUserByUserName(username);</span><br><span class="line">        if (user == null) &#123;</span><br><span class="line">            return null;</span><br><span class="line">        &#125; else &#123;</span><br><span class="line">            AuthenticationInfo info = new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());</span><br><span class="line">            SecurityUtils.getSubject().getSession().setAttribute(&quot;userinfo&quot;, user);</span><br><span class="line">            return info;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/********************************** CustomCredentialsMatcher ***********************************/</span><br><span class="line">package com.smallkk.common.security;</span><br><span class="line">import com.smallkk.common.utils.MD5Utils;</span><br><span class="line">import org.apache.shiro.authc.AuthenticationInfo;</span><br><span class="line">import org.apache.shiro.authc.AuthenticationToken;</span><br><span class="line">import org.apache.shiro.authc.UsernamePasswordToken;</span><br><span class="line">import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;</span><br><span class="line">import java.io.UnsupportedEncodingException;</span><br><span class="line">import java.security.NoSuchAlgorithmException;</span><br><span class="line">/**</span><br><span class="line"> * Created By  醉美柳舞之众星捧月</span><br><span class="line"> * @author song</span><br><span class="line"> * @date 2017/10/31 13:52</span><br><span class="line"> */</span><br><span class="line">public class CustomCredentialsMatcher extends SimpleCredentialsMatcher &#123;</span><br><span class="line">    /**</span><br><span class="line">     * 自定义密码验证</span><br><span class="line">     * @param token</span><br><span class="line">     * @param info</span><br><span class="line">     * @return</span><br><span class="line">     */</span><br><span class="line">    @Override</span><br><span class="line">    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) &#123;</span><br><span class="line">        try &#123;</span><br><span class="line">            UsernamePasswordToken usertoken = (UsernamePasswordToken) token;</span><br><span class="line">            String password = String.valueOf(usertoken.getPassword());</span><br><span class="line">            Object tokenCredentials = MD5Utils.encrptyPassword(password);</span><br><span class="line">            Object accountCredentials = getCredentials(info);</span><br><span class="line">            return equals(tokenCredentials, accountCredentials);</span><br><span class="line">        &#125; catch (NoSuchAlgorithmException e) &#123;</span><br><span class="line">            e.printStackTrace();</span><br><span class="line">        &#125; catch (UnsupportedEncodingException e) &#123;</span><br><span class="line">            e.printStackTrace();</span><br><span class="line">        &#125;</span><br><span class="line">        return false;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/***************************************LoginController***************************************/</span><br><span class="line">package com.smallkk.login.controller;</span><br><span class="line">import com.smallkk.user.entity.User;</span><br><span class="line">import com.smallkk.user.service.UserService;</span><br><span class="line">import org.apache.commons.io.FileUtils;</span><br><span class="line">import org.apache.shiro.SecurityUtils;</span><br><span class="line">import org.apache.shiro.authc.UsernamePasswordToken;</span><br><span class="line">import org.apache.shiro.subject.Subject;</span><br><span class="line">import org.springframework.beans.factory.annotation.Autowired;</span><br><span class="line">import org.springframework.http.HttpHeaders;</span><br><span class="line">import org.springframework.http.HttpStatus;</span><br><span class="line">import org.springframework.http.MediaType;</span><br><span class="line">import org.springframework.http.ResponseEntity;</span><br><span class="line">import org.springframework.stereotype.Controller;</span><br><span class="line">import org.springframework.web.bind.annotation.RequestMapping;</span><br><span class="line">import org.springframework.web.bind.annotation.ResponseBody;</span><br><span class="line">import javax.imageio.ImageIO;</span><br><span class="line">import javax.servlet.http.HttpServletRequest;</span><br><span class="line">import javax.servlet.http.HttpServletResponse;</span><br><span class="line">import javax.servlet.http.HttpSession;</span><br><span class="line">import java.awt.*;</span><br><span class="line">import java.awt.image.BufferedImage;</span><br><span class="line">import java.io.File;</span><br><span class="line">import java.io.IOException;</span><br><span class="line">import java.io.UnsupportedEncodingException;</span><br><span class="line">import java.security.NoSuchAlgorithmException;</span><br><span class="line">import java.util.Random;</span><br><span class="line">/**</span><br><span class="line"> * Created By  醉美柳舞之众星捧月</span><br><span class="line"> * @author song</span><br><span class="line"> * @date 2017/10/19 0:03</span><br><span class="line"> */</span><br><span class="line">@Controller</span><br><span class="line">@RequestMapping(&quot;login&quot;)</span><br><span class="line">public class LoginController &#123;</span><br><span class="line">    @Autowired</span><br><span class="line">    private UserService userService;</span><br><span class="line">    /**</span><br><span class="line">     * Author song  醉美柳舞之众星捧月</span><br><span class="line">     * Date &amp; Time  2017/10/19 22:57</span><br><span class="line">     * Description  登录页面</span><br><span class="line">     */</span><br><span class="line">    @RequestMapping()</span><br><span class="line">    public String login() &#123;</span><br><span class="line">        return &quot;login&quot;;</span><br><span class="line">    &#125;</span><br><span class="line">    /**</span><br><span class="line">     * Author song  醉美柳舞之众星捧月</span><br><span class="line">     * Date &amp; Time  2017/10/19 22:24</span><br><span class="line">     * Description  账号密码校验</span><br><span class="line">     */</span><br><span class="line">    @RequestMapping(&quot;/check&quot;)</span><br><span class="line">    @ResponseBody    //  因为异步;要添加@ResponseBody注解; 否则就404</span><br><span class="line">    public String CheckLogin(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, NoSuchAlgorithmException &#123;</span><br><span class="line">        String username = request.getParameter(&quot;username&quot;);</span><br><span class="line">        String pwd = request.getParameter(&quot;password&quot;);</span><br><span class="line">        String remember = request.getParameter(&quot;remember&quot;);</span><br><span class="line">        UsernamePasswordToken token = new UsernamePasswordToken(username, pwd);</span><br><span class="line">        if (remember.equals(&quot;1&quot;)) &#123;</span><br><span class="line">            token.setRememberMe(true);</span><br><span class="line">        &#125;</span><br><span class="line">        Subject subject = SecurityUtils.getSubject();</span><br><span class="line">        try &#123;</span><br><span class="line">            subject.login(token);</span><br><span class="line">            SecurityUtils.getSubject().getSession().setTimeout(30000);</span><br><span class="line">        &#125; catch (Exception e) &#123;</span><br><span class="line">            return &quot;login_fail&quot;;</span><br><span class="line">        &#125;</span><br><span class="line">        return &quot;login_succ&quot;;</span><br><span class="line">//        此处调用MD5 和 数据库进行匹配  已经被   Shiro取代  !!!!</span><br><span class="line">//        User user = userService.findUserByUserName(username);</span><br><span class="line">//        if (user != null) &#123;</span><br><span class="line">//            if (MD5Utils.checkPassword(pwd, user.getPassword())) &#123;</span><br><span class="line">//                //此处登录成功 可以设置session</span><br><span class="line">//                request.getSession().setAttribute(&quot;userinfo&quot;, user);</span><br><span class="line">//                return &quot;login_succ&quot;;</span><br><span class="line">//            &#125; else &#123;</span><br><span class="line">//                //返回失败信号</span><br><span class="line">//                return &quot;login_fail&quot;;</span><br><span class="line">//            &#125;</span><br><span class="line">//        &#125; else &#123;</span><br><span class="line">//            return &quot;login_fail&quot;;</span><br><span class="line">//        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    /**</span><br><span class="line">     * Author song  醉美柳舞之众星捧月</span><br><span class="line">     * Date &amp; Time  2017/10/19 23:03</span><br><span class="line">     * Description  注册 植入用户</span><br><span class="line">     */</span><br><span class="line">    @RequestMapping(&quot;/register&quot;)</span><br><span class="line">    @ResponseBody</span><br><span class="line">    public String register(User user, HttpServletRequest request, HttpSession session) throws UnsupportedEncodingException, NoSuchAlgorithmException &#123;</span><br><span class="line">        // @RequestBody 通过json 的形式把用户传进来</span><br><span class="line">        String emailuser = request.getParameter(&quot;emailuser&quot;);</span><br><span class="line">        String emailpwd = request.getParameter(&quot;emailpwd&quot;);</span><br><span class="line">        String emailcode = request.getParameter(&quot;emailcode&quot;);</span><br><span class="line">        String strcode = session.getAttribute(&quot;strCode&quot;).toString();</span><br><span class="line">        String realname = request.getParameter(&quot;realname&quot;);</span><br><span class="line">        String mobile = request.getParameter(&quot;mobile&quot;);</span><br><span class="line">        if (emailcode.equals(strcode)) &#123;</span><br><span class="line">            user.setUsername(emailuser);</span><br><span class="line">            user.setPassword(emailpwd);</span><br><span class="line">            user.setRealName(realname);</span><br><span class="line">            user.setMobile(mobile);</span><br><span class="line">            userService.createUser(user);</span><br><span class="line">            return &quot;register_succ&quot;;</span><br><span class="line">        &#125; else &#123;</span><br><span class="line">            return &quot;register_error&quot;;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    //    文件下载</span><br><span class="line">    @RequestMapping(&quot;/down&quot;)</span><br><span class="line">    public ResponseEntity&lt;byte[]&gt; download() throws IOException &#123;</span><br><span class="line">        String path = &quot;&quot;;</span><br><span class="line">        //  文件所在地和文件的名字格式</span><br><span class="line">        File file = new File(path);</span><br><span class="line">        HttpHeaders headers = new HttpHeaders();      //告诉Http头</span><br><span class="line">        headers.setContentDispositionFormData(&quot;attachment&quot;, path);   //我这儿有一个附件  ;path是路径</span><br><span class="line">        headers.setContentType(MediaType.IMAGE_JPEG);     // 这个附件是什么类型的</span><br><span class="line">        return new ResponseEntity&lt;byte[]&gt;(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);</span><br><span class="line">    &#125;</span><br><span class="line">    @RequestMapping(&quot;/authCode&quot;)</span><br><span class="line">    public void getAuthCode(HttpServletRequest request, HttpServletResponse response, HttpSession session)</span><br><span class="line">            throws IOException &#123;</span><br><span class="line">        int width = 63;</span><br><span class="line">        int height = 37;</span><br><span class="line">        Random random = new Random();</span><br><span class="line">        //设置response头信息</span><br><span class="line">        //禁止缓存</span><br><span class="line">        response.setHeader(&quot;Pragma&quot;, &quot;No-cache&quot;);</span><br><span class="line">        response.setHeader(&quot;Cache-Control&quot;, &quot;no-cache&quot;);</span><br><span class="line">        response.setDateHeader(&quot;Expires&quot;, 0);</span><br><span class="line">        //生成缓冲区image类</span><br><span class="line">        BufferedImage image = new BufferedImage(width, height, 1);</span><br><span class="line">        //产生image类的Graphics用于绘制操作</span><br><span class="line">        Graphics g = image.getGraphics();</span><br><span class="line">        //Graphics类的样式</span><br><span class="line">        g.setColor(this.getRandColor(200, 250));</span><br><span class="line">        g.setFont(new Font(&quot;Times New Roman&quot;, 0, 28));</span><br><span class="line">        g.fillRect(0, 0, width, height);</span><br><span class="line">        //绘制干扰线</span><br><span class="line">        for (int i = 0; i &lt; 40; i++) &#123;</span><br><span class="line">            g.setColor(this.getRandColor(130, 200));</span><br><span class="line">            int x = random.nextInt(width);</span><br><span class="line">            int y = random.nextInt(height);</span><br><span class="line">            int x1 = random.nextInt(12);</span><br><span class="line">            int y1 = random.nextInt(12);</span><br><span class="line">            g.drawLine(x, y, x + x1, y + y1);</span><br><span class="line">        &#125;</span><br><span class="line">        //绘制字符</span><br><span class="line">        String strCode = &quot;&quot;;</span><br><span class="line">        for (int i = 0; i &lt; 4; i++) &#123;</span><br><span class="line">            String rand = String.valueOf(random.nextInt(10));</span><br><span class="line">            strCode = strCode + rand;</span><br><span class="line">            g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));</span><br><span class="line">            g.drawString(rand, 13 * i + 6, 28);</span><br><span class="line">        &#125;</span><br><span class="line">        //将字符保存到session中用于前端的验证</span><br><span class="line">        session.setAttribute(&quot;strCode&quot;, strCode);</span><br><span class="line">        g.dispose();</span><br><span class="line">        ImageIO.write(image, &quot;JPEG&quot;, response.getOutputStream());</span><br><span class="line">        response.getOutputStream().flush();</span><br><span class="line">    &#125;</span><br><span class="line">    //创建颜色</span><br><span class="line">    Color getRandColor(int fc, int bc) &#123;</span><br><span class="line">        Random random = new Random();</span><br><span class="line">        if (fc &gt; 255) &#123;</span><br><span class="line">            fc = 255;</span><br><span class="line">        &#125;</span><br><span class="line">        if (bc &gt; 255) &#123;</span><br><span class="line">            bc = 255;</span><br><span class="line">        &#125;</span><br><span class="line">        int r = fc + random.nextInt(bc - fc);</span><br><span class="line">        int g = fc + random.nextInt(bc - fc);</span><br><span class="line">        int b = fc + random.nextInt(bc - fc);</span><br><span class="line">        return new Color(r, g, b);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/**************************************** MD5 *********************************************/</span><br><span class="line">package com.smallkk.common.utils;</span><br><span class="line">import java.io.UnsupportedEncodingException;</span><br><span class="line">import java.security.MessageDigest;</span><br><span class="line">import java.security.NoSuchAlgorithmException;</span><br><span class="line">import java.util.Base64;</span><br><span class="line">/**</span><br><span class="line"> * Created By  醉美柳舞之众星捧月</span><br><span class="line"> * @author song</span><br><span class="line"> * @date 2017/10/19 22:09</span><br><span class="line"> */</span><br><span class="line">public class MD5Utils &#123;</span><br><span class="line">    /**</span><br><span class="line">     * Author song  醉美柳舞之众星捧月</span><br><span class="line">     * Date &amp; Time  2017/10/19 22:09</span><br><span class="line">     * Description  消息摘要算法 人类看不懂的</span><br><span class="line">     */</span><br><span class="line">    public static String encrptyPassword(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException &#123;</span><br><span class="line">        MessageDigest md5 = MessageDigest.getInstance(&quot;MD5&quot;);</span><br><span class="line">//JDK9.0已经不再支持BASE64Encoder;rj.jar包已经从JDK里面移除;</span><br><span class="line">        //用import java.util.Base64;来替换</span><br><span class="line">//        BASE64Encoder base64Encoder = new BASE64Encoder();</span><br><span class="line">//        String result = base64Encoder.encode(md5.digest(password.getBytes(&quot;utf-8&quot;)));</span><br><span class="line">        Base64.Encoder encoder = Base64.getEncoder();</span><br><span class="line">        String result = encoder.encodeToString(md5.digest(password.getBytes(&quot;utf-8&quot;)));</span><br><span class="line">        // 通过utf-8的方式生成字节码 把密码转换 ;再让BASE64Encoder转换一下,防止加密乱码啊什么的</span><br><span class="line">        return result;</span><br><span class="line">    &#125;</span><br><span class="line">    /**</span><br><span class="line">     * Author song  醉美柳舞之众星捧月</span><br><span class="line">     * Date &amp; Time  2017/10/19 22:17</span><br><span class="line">     * Description   判断传入的密码和数据库中的密码是否一致</span><br><span class="line">     */</span><br><span class="line">    public static boolean checkPassword(String inputPwd, String dbPwd) throws UnsupportedEncodingException, NoSuchAlgorithmException &#123;</span><br><span class="line">        //分别传入的是  用户输入传入的密码,数据库中已有的传入的密码</span><br><span class="line">        String result = encrptyPassword(inputPwd);</span><br><span class="line">        if (result.equals(dbPwd)) &#123;</span><br><span class="line">            return true;</span><br><span class="line">        &#125; else &#123;</span><br><span class="line">            return false;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/************************************* foreach*********************************************/</span><br><span class="line">@RequestMapping</span><br><span class="line">public String toReAttend(Model model, HttpSession session) &#123;</span><br><span class="line">    User user = (User) SecurityUtils.getSubject().getSession().getAttribute(&quot;userinfo&quot;);</span><br><span class="line">    List&lt;ReAttend&gt; reAttendList = reAttendService.listReAttend(user.getUsername());</span><br><span class="line">    model.addAttribute(&quot;reAttendList&quot;, reAttendList);</span><br><span class="line">    return &quot;reAttend&quot;;</span><br><span class="line">&#125;</span><br><span class="line">&lt;table id=&quot;attend_grid&quot; class=&quot;table table-bordered table-striped&quot;&gt;</span><br><span class="line">    &lt;thead&gt;</span><br><span class="line">    &lt;tr&gt;</span><br><span class="line">        &lt;th&gt;序号&lt;/th&gt;</span><br><span class="line">        &lt;th&gt;补签日期&lt;/th&gt;</span><br><span class="line">        &lt;th&gt;早打卡&lt;/th&gt;</span><br><span class="line">        &lt;th&gt;晚打卡&lt;/th&gt;</span><br><span class="line">        &lt;th&gt;当前处理人&lt;/th&gt;</span><br><span class="line">        &lt;th&gt;状态&lt;/th&gt;</span><br><span class="line">    &lt;/tr&gt;</span><br><span class="line">    &lt;/thead&gt;</span><br><span class="line">    #foreach( $reAttend in $reAttendList )</span><br><span class="line">        &lt;tr&gt;</span><br><span class="line">            &lt;td&gt;$foreach.count&lt;/td&gt;</span><br><span class="line">            &lt;td&gt;$date.format(&apos;yyyy-MM-dd&apos;,$reAttend.attendDate)&lt;/td&gt;</span><br><span class="line">            &lt;td&gt;$date.format(&apos;HH:mm:ss&apos;,$reAttend.reAttendMor)&lt;/td&gt;</span><br><span class="line">            &lt;td&gt;$date.format(&apos;HH:mm:ss&apos;,$reAttend.reAttendEve)&lt;/td&gt;</span><br><span class="line">            &lt;td&gt;$reAttend.currentHandler&lt;/td&gt;</span><br><span class="line">            &lt;td&gt;</span><br><span class="line">                #if($reAttend.status==1)</span><br><span class="line">                    处理中</span><br><span class="line">                #elseif($reAttend.status==2)</span><br><span class="line">                    审批通过</span><br><span class="line">                #elseif($reAttend.status==3)</span><br><span class="line">                    审批不通过</span><br><span class="line">                #end</span><br><span class="line">            &lt;/td&gt;</span><br><span class="line">        &lt;/tr&gt;</span><br><span class="line">    #end</span><br><span class="line">&lt;/table&gt;</span><br><span class="line">/**************************************多表联合*********************************************/</span><br><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;</span><br><span class="line">&lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot; &gt;</span><br><span class="line">&lt;mapper namespace=&quot;com.smallkk.user.dao.UserMapper&quot;&gt;</span><br><span class="line">    &lt;resultMap id=&quot;BaseResultMap&quot; type=&quot;com.smallkk.user.entity.User&quot;&gt;</span><br><span class="line">        &lt;id column=&quot;id&quot; property=&quot;id&quot; jdbcType=&quot;BIGINT&quot;/&gt;</span><br><span class="line">        &lt;result column=&quot;username&quot; property=&quot;username&quot; jdbcType=&quot;VARCHAR&quot;/&gt;</span><br><span class="line">        &lt;result column=&quot;password&quot; property=&quot;password&quot; jdbcType=&quot;VARCHAR&quot;/&gt;</span><br><span class="line">        &lt;result column=&quot;mobile&quot; property=&quot;mobile&quot; jdbcType=&quot;VARCHAR&quot;/&gt;</span><br><span class="line">        &lt;result column=&quot;real_name&quot; property=&quot;realName&quot; jdbcType=&quot;VARCHAR&quot;/&gt;</span><br><span class="line">        &lt;result column=&quot;head_image&quot; property=&quot;headImage&quot; jdbcType=&quot;VARCHAR&quot;/&gt;</span><br><span class="line">        &lt;collection property=&quot;roleList&quot; resultMap=&quot;RoleResultMap&quot;/&gt;</span><br><span class="line">    &lt;/resultMap&gt;</span><br><span class="line">    &lt;resultMap id=&quot;RoleResultMap&quot; type=&quot;com.smallkk.user.entity.Role&quot;&gt;</span><br><span class="line">        &lt;id column=&quot;roleid&quot; property=&quot;roleid&quot; jdbcType=&quot;BIGINT&quot;/&gt;</span><br><span class="line">        &lt;result column=&quot;role&quot; property=&quot;role&quot; jdbcType=&quot;VARCHAR&quot;/&gt;</span><br><span class="line">        &lt;result column=&quot;rd&quot; property=&quot;description&quot; jdbcType=&quot;VARCHAR&quot;/&gt;</span><br><span class="line">        &lt;collection property=&quot;permissionList&quot; resultMap=&quot;PermissionResultMap&quot;/&gt;</span><br><span class="line">    &lt;/resultMap&gt;</span><br><span class="line">    &lt;resultMap id=&quot;PermissionResultMap&quot; type=&quot;com.smallkk.user.entity.Permission&quot;&gt;</span><br><span class="line">        &lt;id column=&quot;permissionid&quot; property=&quot;permissionid&quot; jdbcType=&quot;BIGINT&quot;/&gt;</span><br><span class="line">        &lt;result column=&quot;permission&quot; property=&quot;permission&quot; jdbcType=&quot;VARCHAR&quot;/&gt;</span><br><span class="line">        &lt;result column=&quot;pd&quot; property=&quot;description&quot; jdbcType=&quot;VARCHAR&quot;/&gt;</span><br><span class="line">    &lt;/resultMap&gt;</span><br><span class="line">    &lt;sql id=&quot;Permission_Column_List&quot;&gt;    permissionid, permission, p.description pd&lt;/sql&gt;</span><br><span class="line">    &lt;sql id=&quot;Role_Column_List&quot;&gt;    roleid, role, r.description rd&lt;/sql&gt;</span><br><span class="line">    &lt;sql id=&quot;Base_Column_List&quot;&gt;    id, username, password, mobile, real_name, head_image&lt;/sql&gt;</span><br><span class="line">    &lt;select id=&quot;selectByPrimaryKey&quot; resultMap=&quot;BaseResultMap&quot; parameterType=&quot;java.lang.Long&quot;&gt;select</span><br><span class="line">        &lt;include refid=&quot;Base_Column_List&quot;/&gt;</span><br><span class="line">        from user where id = #&#123;id,jdbcType=BIGINT&#125;</span><br><span class="line">    &lt;/select&gt;</span><br><span class="line">    &lt;select id=&quot;selectByUserName&quot; resultMap=&quot;BaseResultMap&quot;&gt;SELECT&lt;include refid=&quot;Base_Column_List&quot;/&gt;,&lt;include</span><br><span class="line">            refid=&quot;Role_Column_List&quot;/&gt;,</span><br><span class="line">        &lt;include refid=&quot;Permission_Column_List&quot;/&gt;</span><br><span class="line">        FROM user u LEFT JOIN user_role ur ON ur.user_id = u.id LEFT JOIN role r ON ur.role_id=r.roleid LEFT JOIN</span><br><span class="line">        role_permission rp ON rp.role_id=r.roleid LEFT JOIN permission p ON p.permissionid = rp.permission_id WHERE</span><br><span class="line">        username = #&#123;username&#125;</span><br><span class="line">    &lt;/select&gt;</span><br><span class="line">    &lt;delete id=&quot;deleteByPrimaryKey&quot; parameterType=&quot;java.lang.Long&quot;&gt;delete from userwhere id = #&#123;id,jdbcType=BIGINT&#125;</span><br><span class="line">&lt;/delete&gt;</span><br><span class="line">    &lt;insert id=&quot;insert&quot; parameterType=&quot;com.smallkk.user.entity.User&quot;&gt;insert into user (id, username, password,   mobile, real_name, head_image  )values (#&#123;id,jdbcType=BIGINT&#125;, #&#123;username,jdbcType=VARCHAR&#125;, #&#123;password,jdbcType=VARCHAR&#125;,   #&#123;mobile,jdbcType=VARCHAR&#125;, #&#123;realName,jdbcType=VARCHAR&#125;, #&#123;headImage,jdbcType=VARCHAR&#125;  )</span><br><span class="line">  &lt;/insert&gt;</span><br><span class="line">    &lt;insert id=&quot;insertSelective&quot; parameterType=&quot;com.smallkk.user.entity.User&quot;&gt;insert into user</span><br><span class="line">        &lt;trim prefix=&quot;(&quot; suffix=&quot;)&quot; suffixOverrides=&quot;,&quot;&gt;</span><br><span class="line">            &lt;if test=&quot;id != null&quot;&gt;id,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;username != null&quot;&gt;username,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;password != null&quot;&gt;password,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;mobile != null&quot;&gt;mobile,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;realName != null&quot;&gt;real_name,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;headImage != null&quot;&gt;head_image,&lt;/if&gt;</span><br><span class="line">        &lt;/trim&gt;</span><br><span class="line">        &lt;trim prefix=&quot;values (&quot; suffix=&quot;)&quot; suffixOverrides=&quot;,&quot;&gt;</span><br><span class="line">            &lt;if test=&quot;id != null&quot;&gt;#&#123;id,jdbcType=BIGINT&#125;,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;username != null&quot;&gt;#&#123;username,jdbcType=VARCHAR&#125;,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;password != null&quot;&gt;#&#123;password,jdbcType=VARCHAR&#125;,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;mobile != null&quot;&gt;#&#123;mobile,jdbcType=VARCHAR&#125;,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;realName != null&quot;&gt;#&#123;realName,jdbcType=VARCHAR&#125;,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;headImage != null&quot;&gt;#&#123;headImage,jdbcType=VARCHAR&#125;,&lt;/if&gt;</span><br><span class="line">        &lt;/trim&gt;</span><br><span class="line">    &lt;/insert&gt;</span><br><span class="line">    &lt;update id=&quot;updateByPrimaryKeySelective&quot; parameterType=&quot;com.smallkk.user.entity.User&quot;&gt;update user</span><br><span class="line">        &lt;set&gt;</span><br><span class="line">            &lt;if test=&quot;username != null&quot;&gt;username = #&#123;username,jdbcType=VARCHAR&#125;,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;password != null&quot;&gt;password = #&#123;password,jdbcType=VARCHAR&#125;,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;mobile != null&quot;&gt;mobile = #&#123;mobile,jdbcType=VARCHAR&#125;,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;realName != null&quot;&gt;real_name = #&#123;realName,jdbcType=VARCHAR&#125;,&lt;/if&gt;</span><br><span class="line">            &lt;if test=&quot;headImage != null&quot;&gt;head_image = #&#123;headImage,jdbcType=VARCHAR&#125;,&lt;/if&gt;</span><br><span class="line">        &lt;/set&gt;</span><br><span class="line">        where id = #&#123;id,jdbcType=BIGINT&#125;</span><br><span class="line">    &lt;/update&gt;</span><br><span class="line">    &lt;update id=&quot;updateByPrimaryKey&quot; parameterType=&quot;com.smallkk.user.entity.User&quot;&gt;update userset username = #&#123;username,jdbcType=VARCHAR&#125;,  password = #&#123;password,jdbcType=VARCHAR&#125;,  mobile = #&#123;mobile,jdbcType=VARCHAR&#125;,  real_name = #&#123;realName,jdbcType=VARCHAR&#125;,  head_image = #&#123;headImage,jdbcType=VARCHAR&#125;where id = #&#123;id,jdbcType=BIGINT&#125;</span><br><span class="line">  &lt;/update&gt;</span><br><span class="line">&lt;/mapper&gt;</span><br><span class="line">/*************************************** Ajax① *******************************************/</span><br><span class="line">$(function () &#123;</span><br><span class="line">    $.ajax(&#123;</span><br><span class="line">        type: &quot;POST&quot;,</span><br><span class="line">        url: &quot;/user/userinfo&quot;,</span><br><span class="line">        dataType: &quot;json&quot;,</span><br><span class="line">        contentType: &quot;application/json;charset=UTF-8&quot;,</span><br><span class="line">        data: &#123;&#125;,</span><br><span class="line">        success: function (data) &#123;</span><br><span class="line">            $(&quot;.user_head_img&quot;).attr(&quot;src&quot;, data.headImage);</span><br><span class="line">            $(&quot;.user_name&quot;).html(data.realName);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;);</span><br><span class="line">/*************************************** Ajax② *********************************************/</span><br><span class="line">var user = $(&quot;#user&quot;).val();</span><br><span class="line">var pwd = $(&quot;#pwd&quot;).val();</span><br><span class="line">$.ajax(&#123;</span><br><span class="line">    type: &quot;POST&quot;,</span><br><span class="line">    url: &quot;/login/check&quot;,</span><br><span class="line">    data: &#123;&quot;username&quot;: user, &quot;password&quot;: pwd &#125;,</span><br><span class="line">    success: function (data) &#123;</span><br><span class="line">        if (data == &quot;login_succ&quot;) &#123;</span><br><span class="line">            window.location.href = &quot;/user/home&quot;;</span><br><span class="line">        &#125; else &#123;</span><br><span class="line">            $.pnotify(&#123;</span><br><span class="line">                title: &apos;Error !&apos;,</span><br><span class="line">                text: &apos;用户名或密码不正确,请重新输入.&apos;,</span><br><span class="line">                type: &apos;success&apos;</span><br><span class="line">            &#125;);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;);</span><br><span class="line">String username = request.getParameter(&quot;username&quot;);</span><br><span class="line">String pwd = request.getParameter(&quot;password&quot;);</span><br><span class="line">/************************************ SessionInterceptor ****************************************/</span><br><span class="line">package com.smallkk.common.interceptor;</span><br><span class="line">import com.smallkk.user.entity.User;</span><br><span class="line">import org.springframework.web.servlet.HandlerInterceptor;</span><br><span class="line">import org.springframework.web.servlet.ModelAndView;</span><br><span class="line">import javax.servlet.http.HttpServletRequest;</span><br><span class="line">import javax.servlet.http.HttpServletResponse;</span><br><span class="line">import javax.servlet.http.HttpSession;</span><br><span class="line">/**</span><br><span class="line"> * Created By  醉美柳舞之众星捧月</span><br><span class="line"> * @author song</span><br><span class="line"> * @date 2017/10/19 23:55</span><br><span class="line"> */</span><br><span class="line">public class SessionInterceptor implements HandlerInterceptor &#123;</span><br><span class="line">    @Override</span><br><span class="line">    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception &#123;</span><br><span class="line">        String uri = request.getRequestURI();</span><br><span class="line">        if (uri.indexOf(&quot;login&quot;) &gt;= 0 || uri.indexOf(&quot;sign&quot;) &gt;= 0 || uri.indexOf(&quot;error&quot;) &gt;= 0||uri.indexOf(&quot;reAttend&quot;) &gt;= 0) &#123;</span><br><span class="line">            return true;</span><br><span class="line">        &#125;</span><br><span class="line">        HttpSession session = request.getSession();</span><br><span class="line">        User user = (User) session.getAttribute(&quot;userinfo&quot;);</span><br><span class="line">        if (user != null) &#123;</span><br><span class="line">            return true;</span><br><span class="line">        &#125;</span><br><span class="line">        // 转发到登录页面</span><br><span class="line">        request.getRequestDispatcher(&quot;/login&quot;).forward(request, response);</span><br><span class="line">        return false;</span><br><span class="line">    &#125;</span><br><span class="line">    @Override</span><br><span class="line">    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception &#123;</span><br><span class="line">    &#125;</span><br><span class="line">    @Override</span><br><span class="line">    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception &#123;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line">/**************************************** web.xml *********************************************/</span><br><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><br><span class="line">&lt;web-app xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><br><span class="line">         xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot;</span><br><span class="line">         xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&quot;</span><br><span class="line">         version=&quot;3.0&quot;&gt;</span><br><span class="line">    &lt;display-name&gt;work-attendance&lt;/display-name&gt;</span><br><span class="line">    &lt;!--spring配置的位置--&gt;</span><br><span class="line">    &lt;context-param&gt;</span><br><span class="line">        &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</span><br><span class="line">        &lt;param-value&gt;classpath:spring-cfg.xml&lt;/param-value&gt;</span><br><span class="line">    &lt;/context-param&gt;</span><br><span class="line">    &lt;!--spring在监听器中启动--&gt;</span><br><span class="line">    &lt;listener&gt;</span><br><span class="line">        &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;</span><br><span class="line">    &lt;/listener&gt;</span><br><span class="line">    &lt;!--添加Spring乱码过滤器--&gt;</span><br><span class="line">    &lt;filter&gt;</span><br><span class="line">        &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;</span><br><span class="line">        &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt;</span><br><span class="line">        &lt;async-supported&gt;true&lt;/async-supported&gt;</span><br><span class="line">        &lt;init-param&gt;</span><br><span class="line">            &lt;param-name&gt;encoding&lt;/param-name&gt;</span><br><span class="line">            &lt;param-value&gt;UTF-8&lt;/param-value&gt;</span><br><span class="line">        &lt;/init-param&gt;</span><br><span class="line">    &lt;/filter&gt;</span><br><span class="line">    &lt;filter-mapping&gt;</span><br><span class="line">        &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;</span><br><span class="line">        &lt;url-pattern&gt;/*&lt;/url-pattern&gt;</span><br><span class="line">    &lt;/filter-mapping&gt;</span><br><span class="line">    &lt;!--shiro权限过滤器--&gt;</span><br><span class="line">    &lt;filter&gt;</span><br><span class="line">        &lt;filter-name&gt;shiroFilter&lt;/filter-name&gt;</span><br><span class="line">        &lt;filter-class&gt;org.springframework.web.filter.DelegatingFilterProxy&lt;/filter-class&gt;</span><br><span class="line">        &lt;async-supported&gt;true&lt;/async-supported&gt;</span><br><span class="line">        &lt;init-param&gt;</span><br><span class="line">            &lt;!-- 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理 --&gt;</span><br><span class="line">            &lt;param-name&gt;targetFilterLifecycle&lt;/param-name&gt;</span><br><span class="line">            &lt;param-value&gt;true&lt;/param-value&gt;</span><br><span class="line">        &lt;/init-param&gt;</span><br><span class="line">    &lt;/filter&gt;</span><br><span class="line">    &lt;filter-mapping&gt;</span><br><span class="line">        &lt;filter-name&gt;shiroFilter&lt;/filter-name&gt;</span><br><span class="line">        &lt;url-pattern&gt;/*&lt;/url-pattern&gt;</span><br><span class="line">    &lt;/filter-mapping&gt;</span><br><span class="line">    &lt;!--Spring MVC servlet--&gt;</span><br><span class="line">    &lt;servlet&gt;</span><br><span class="line">        &lt;servlet-name&gt;SpringMVC&lt;/servlet-name&gt;</span><br><span class="line">        &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;</span><br><span class="line">        &lt;init-param&gt;</span><br><span class="line">            &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</span><br><span class="line">            &lt;param-value&gt;classpath:spring-mvc.xml&lt;/param-value&gt;</span><br><span class="line">        &lt;/init-param&gt;</span><br><span class="line">        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</span><br><span class="line">        &lt;async-supported&gt;true&lt;/async-supported&gt;</span><br><span class="line">    &lt;/servlet&gt;</span><br><span class="line">    &lt;servlet-mapping&gt;</span><br><span class="line">        &lt;servlet-name&gt;SpringMVC&lt;/servlet-name&gt;</span><br><span class="line">        &lt;url-pattern&gt;/*&lt;/url-pattern&gt;</span><br><span class="line">    &lt;/servlet-mapping&gt;</span><br><span class="line">    &lt;!--此处的default是spring-mvc里面的default处理默认静态资源的;此处的作用是将路径中的资源进行放过--&gt;</span><br><span class="line">    &lt;!--那么这个路径中的资源就不会经过interceptor这个拦截器了--&gt;</span><br><span class="line">    &lt;servlet-mapping&gt;</span><br><span class="line">        &lt;servlet-name&gt;default&lt;/servlet-name&gt;</span><br><span class="line">        &lt;url-pattern&gt;/static/*&lt;/url-pattern&gt;</span><br><span class="line">    &lt;/servlet-mapping&gt;</span><br><span class="line">    &lt;error-page&gt;</span><br><span class="line">        &lt;error-code&gt;404&lt;/error-code&gt;</span><br><span class="line">        &lt;location&gt;/WEB-INF/views/error/404.html&lt;/location&gt;</span><br><span class="line">    &lt;/error-page&gt;</span><br><span class="line">    &lt;error-page&gt;</span><br><span class="line">        &lt;error-code&gt;500&lt;/error-code&gt;</span><br><span class="line">        &lt;location&gt;/WEB-INF/views/error/500.html&lt;/location&gt;</span><br><span class="line">    &lt;/error-page&gt;</span><br><span class="line">    &lt;!--配置log4j--&gt;</span><br><span class="line">    &lt;context-param&gt;</span><br><span class="line">        &lt;param-name&gt;log4jConfigLocation&lt;/param-name&gt;</span><br><span class="line">        &lt;param-value&gt;classpath:log4j.properties&lt;/param-value&gt;</span><br><span class="line">    &lt;/context-param&gt;</span><br><span class="line">&lt;/web-app&gt;</span><br><span class="line"> /**************************************** pom.xml *******************************************/       </span><br><span class="line">&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><br><span class="line">         xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;</span><br><span class="line">    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;</span><br><span class="line">    &lt;groupId&gt;com&lt;/groupId&gt;</span><br><span class="line">    &lt;artifactId&gt;smallkk&lt;/artifactId&gt;</span><br><span class="line">    &lt;packaging&gt;war&lt;/packaging&gt;</span><br><span class="line">    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;</span><br><span class="line">    &lt;name&gt;work-attendance&lt;/name&gt;</span><br><span class="line">    &lt;properties&gt;</span><br><span class="line">        &lt;spring.version&gt;4.1.4.RELEASE&lt;/spring.version&gt;</span><br><span class="line">        &lt;mybatis.version&gt;3.2.8&lt;/mybatis.version&gt;</span><br><span class="line">        &lt;slf4j.version&gt;1.7.7&lt;/slf4j.version&gt;</span><br><span class="line">        &lt;log4j.version&gt;1.2.17&lt;/log4j.version&gt;</span><br><span class="line">        &lt;quartz.version&gt;2.2.2&lt;/quartz.version&gt;</span><br><span class="line">        &lt;activiti.version&gt;5.15.1&lt;/activiti.version&gt;</span><br><span class="line">    &lt;/properties&gt;</span><br><span class="line">    &lt;dependencies&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.springframework&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;spring-core&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;spring.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.springframework&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;spring-context&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;spring.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 添加spring-tx包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.springframework&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;spring-tx&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;spring.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 添加spring-jdbc包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.springframework&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;spring-jdbc&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;spring.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 为了方便进行单元测试，添加spring-test包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.springframework&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;spring-test&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;spring.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!--添加spring-web包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.springframework&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;spring-web&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;spring.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.springframework&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;spring-webmvc&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;spring.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.springframework&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;spring-aop&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;spring.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.springframework&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;spring-context-support&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;spring.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!--添加aspectjweaver包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.aspectj&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;aspectjweaver&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.8.5&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 添加mybatis的核心包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.mybatis&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;mybatis&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;mybatis.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 添加mybatis与Spring整合的核心包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.mybatis&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;mybatis-spring&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.2.2&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 添加servlet3.0核心包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;javax.servlet&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;3.0.1&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;javax.servlet.jsp&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;javax.servlet.jsp-api&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;2.3.2-b01&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- jstl --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;javax.servlet&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;jstl&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.2&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 添加mysql驱动包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;mysql&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;5.1.34&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 添加druid连接池包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;com.alibaba&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;druid&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.0.12&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 日志文件管理包 --&gt;</span><br><span class="line">        &lt;!-- log start --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;log4j&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;log4j&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;log4j.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 格式化对象，方便输出日志 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;com.alibaba&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;fastjson&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.1.41&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.slf4j&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;slf4j-api&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;slf4j.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.slf4j&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;slf4j-log4j12&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;slf4j.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- log end --&gt;</span><br><span class="line">        &lt;!--apache shiro  --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.apache.shiro&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;shiro-core&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.2.2&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.apache.shiro&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;shiro-web&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.2.2&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.apache.shiro&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;shiro-spring&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.2.2&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!--apache shiro  end--&gt;</span><br><span class="line">        &lt;!-- 映入JSON --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.codehaus.jackson&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;jackson-mapper-asl&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.9.13&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!-- 上传组件包 --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;commons-fileupload&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;commons-fileupload&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.3.1&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;commons-io&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;commons-io&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;2.4&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;commons-codec&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;commons-codec&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.9&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.apache.velocity&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;velocity&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.7&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.apache.velocity&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;velocity-tools&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;2.0&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.mybatis.generator&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;mybatis-generator-core&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;1.3.2&lt;/version&gt;</span><br><span class="line">            &lt;scope&gt;test&lt;/scope&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.quartz-scheduler&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;quartz&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;quartz.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!--activity工作流依赖--&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.activiti&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;activiti-engine&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;activiti.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;!--activiti与Spring集成--&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.activiti&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;activiti-spring&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;$&#123;activiti.version&#125;&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;com.qiniu&lt;/groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;qiniu-java-sdk&lt;/artifactId&gt;</span><br><span class="line">            &lt;version&gt;7.2.6&lt;/version&gt;</span><br><span class="line">        &lt;/dependency&gt;</span><br><span class="line">    &lt;/dependencies&gt;</span><br><span class="line">    &lt;build&gt;</span><br><span class="line">        &lt;finalName&gt;smallkk&lt;/finalName&gt;</span><br><span class="line">        &lt;!--配置强制加载  在启动编译的时候可能会编译有些xml文件;所以此处给它强制加载--&gt;</span><br><span class="line">        &lt;resources&gt;</span><br><span class="line">            &lt;resource&gt;</span><br><span class="line">                &lt;directory&gt;src/main/java&lt;/directory&gt;</span><br><span class="line">                &lt;includes&gt;</span><br><span class="line">                    &lt;include&gt;**/*.xml&lt;/include&gt;</span><br><span class="line">                &lt;/includes&gt;</span><br><span class="line">            &lt;/resource&gt;</span><br><span class="line">        &lt;/resources&gt;</span><br><span class="line">        &lt;plugins&gt;</span><br><span class="line">            &lt;plugin&gt;</span><br><span class="line">                &lt;groupId&gt;org.mybatis.generator&lt;/groupId&gt;</span><br><span class="line">                &lt;artifactId&gt;mybatis-generator-maven-plugin&lt;/artifactId&gt;</span><br><span class="line">                &lt;version&gt;1.3.2&lt;/version&gt;</span><br><span class="line">                &lt;configuration&gt;</span><br><span class="line">                    &lt;verbose&gt;true&lt;/verbose&gt;</span><br><span class="line">                    &lt;overwrite&gt;true&lt;/overwrite&gt;</span><br><span class="line">                &lt;/configuration&gt;</span><br><span class="line">            &lt;/plugin&gt;</span><br><span class="line">            &lt;plugin&gt;</span><br><span class="line">                &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;</span><br><span class="line">                &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;</span><br><span class="line">                &lt;version&gt;2.3.2&lt;/version&gt;</span><br><span class="line">                &lt;configuration&gt;</span><br><span class="line">                    &lt;source&gt;1.8&lt;/source&gt;</span><br><span class="line">                    &lt;target&gt;1.8&lt;/target&gt;</span><br><span class="line">                &lt;/configuration&gt;</span><br><span class="line">            &lt;/plugin&gt;</span><br><span class="line">        &lt;/plugins&gt;</span><br><span class="line">    &lt;/build&gt;</span><br><span class="line">&lt;/project&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">/**************************************** log4j *******************************************/</span><br><span class="line">######################################</span><br><span class="line">#         log4j配置相关说明</span><br><span class="line">######################################</span><br><span class="line">#%p 输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL</span><br><span class="line">#%r 输出自应用启动到输出该log信息耗费的毫秒数</span><br><span class="line">#%c 输出所属的类目，通常就是所在类的全名</span><br><span class="line">#%t 输出产生该日志事件的线程名</span><br><span class="line">#%m 输出代码中指定的信息</span><br><span class="line">#%n 输出一个回车换行符，Windows平台为“\r\n”，Unix平台为“\n”</span><br><span class="line">#%d 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d&#123;yyyy MM dd HH:mm:ss,SSS&#125;，输出类似： 2002年10月18日 22：10：28，921</span><br><span class="line">#%l 输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10)</span><br><span class="line">#log4j提供4种布局:</span><br><span class="line">#org.apache.log4j.HTMLLayout（以HTML表格形式布局）</span><br><span class="line">#org.apache.log4j.PatternLayout（可以灵活地指定布局模式），</span><br><span class="line">#org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），</span><br><span class="line">#org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息</span><br><span class="line">#log4j中有五级logger 输出级别:</span><br><span class="line">#FATAL 0</span><br><span class="line">#ERROR 3</span><br><span class="line">#WARN 4</span><br><span class="line">#INFO 6</span><br><span class="line">#DEBUG 7</span><br><span class="line">######################################</span><br><span class="line">#          log4j相关配置</span><br><span class="line">######################################</span><br><span class="line">#日志输出级别</span><br><span class="line">log4j.rootLogger=DEBUG,stdout,other</span><br><span class="line">#设置stdout的日志输出控制台</span><br><span class="line">log4j.appender.stdout=org.apache.log4j.ConsoleAppender</span><br><span class="line">#输出日志到控制台的方式，默认为System.out</span><br><span class="line">log4j.appender.stdout.Target=System.out</span><br><span class="line">#设置使用灵活布局</span><br><span class="line">log4j.appender.stdout.layout=org.apache.log4j.PatternLayout</span><br><span class="line">#灵活定义输出格式</span><br><span class="line">log4j.appender.stdout.layout.ConversionPattern=[%p][%d&#123;yyyy-MM-dd HH:mm:ss&#125;] %l %m %n</span><br><span class="line">#设置other的日志输出控制台</span><br><span class="line">log4j.appender.other=org.apache.log4j.RollingFileAppender</span><br><span class="line">#设置other的输出日志</span><br><span class="line">log4j.appender.other.File=/work-attend/logs/log.txt</span><br><span class="line">#设置other的日志最大限制</span><br><span class="line">log4j.appender.other.MaxFileSize=1024KB</span><br><span class="line">#最多只保存20个备份文件</span><br><span class="line">log4j.appender.other.MaxBackupIndex=1000  </span><br><span class="line">#输出INFO级别以上的日志</span><br><span class="line">log4j.appender.other.Threshold=INFO</span><br><span class="line">#设置使用灵活布局</span><br><span class="line">log4j.appender.other.layout=org.apache.log4j.PatternLayout  </span><br><span class="line">#灵活定义输出格式</span><br><span class="line">log4j.appender.other.layout.ConversionPattern=[%p][%d&#123;yyyy-MM-dd HH:mm:ss&#125;] %l %t %m %n    </span><br><span class="line">###显示SQL语句部分</span><br><span class="line">log4j.logger.com.mybatis=DEBUG</span><br><span class="line">log4j.logger.com.mybatis.common.jdbc.SimpleDataSource=DEBUG</span><br><span class="line">log4j.logger.com.mybatis.common.jdbc.ScriptRunner=DEBUG</span><br><span class="line">log4j.logger.com.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG</span><br><span class="line">log4j.logger.java.sql.Connection=DEBUG</span><br><span class="line">log4j.logger.java.sql.Statement=DEBUG</span><br><span class="line">log4j.logger.java.sql.PreparedStatement=DEBUG</span><br><span class="line">log4j.logger.java.sql.ResultSet=DEBUG</span><br><span class="line">/********************************** logback.xml **************************************/</span><br><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><br><span class="line">&lt;configuration&gt;</span><br><span class="line">    &lt;property name=&quot;LOG_HOME&quot; value=&quot;/logs/RecoverMaMaBike/&quot;/&gt;</span><br><span class="line"></span><br><span class="line">    &lt;!--主要输出配置项目--&gt;</span><br><span class="line">    &lt;!--输出配置标签： 控制台输出--&gt;</span><br><span class="line">    &lt;appender name=&quot;Console&quot; class=&quot;ch.qos.logback.core.ConsoleAppender&quot;&gt;</span><br><span class="line">        &lt;encoder&gt;</span><br><span class="line">            &lt;!--输出的格式--&gt;</span><br><span class="line">            &lt;pattern&gt;%d&#123;H:mm&#125; %-5level [%logger&#123;16&#125;] %msg%n&lt;/pattern&gt;</span><br><span class="line">        &lt;/encoder&gt;</span><br><span class="line">    &lt;/appender&gt;</span><br><span class="line">    &lt;!--正常日志配置--&gt;</span><br><span class="line">    &lt;appender name=&quot;normalLog&quot;</span><br><span class="line">              class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&gt;</span><br><span class="line">        &lt;!--滚动策略 基于时间来滚动(每天生成一个文本)--&gt;</span><br><span class="line">        &lt;rollingPolicy class=&quot;ch.qos.logback.core.rolling.TimeBasedRollingPolicy&quot;&gt;</span><br><span class="line">            &lt;!--文件名字格式--&gt;</span><br><span class="line">            &lt;FileNamePattern&gt;$&#123;LOG_HOME&#125;/web.normal.%d&#123;yyyy-MM-dd&#125;.log</span><br><span class="line">            &lt;/FileNamePattern&gt;</span><br><span class="line">            &lt;MaxHistory&gt;30&lt;/MaxHistory&gt;</span><br><span class="line">        &lt;/rollingPolicy&gt;</span><br><span class="line">        &lt;!--超过10M的话，就格外生成一个新的文本(文件太大 电脑不好打开 不方便阅读)--&gt;</span><br><span class="line">        &lt;triggeringPolicy class=&quot;ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&quot;&gt;</span><br><span class="line">            &lt;maxFileSize&gt;10MB&lt;/maxFileSize&gt;</span><br><span class="line">        &lt;/triggeringPolicy&gt;</span><br><span class="line">        &lt;!--日志内容格式--&gt;</span><br><span class="line">        &lt;layout class=&quot;ch.qos.logback.classic.PatternLayout&quot;&gt;</span><br><span class="line">            &lt;pattern&gt;%d&#123;HH:mm:ss.SSS&#125; [%thread] %-5level %logger&#123;16&#125; - %msg%n</span><br><span class="line">            &lt;/pattern&gt;</span><br><span class="line">        &lt;/layout&gt;</span><br><span class="line">        &lt;!--重点配置--&gt;</span><br><span class="line">        &lt;!--重点配置--&gt;</span><br><span class="line">        &lt;!--重点配置--&gt;</span><br><span class="line">        &lt;filter class=&quot;ch.qos.logback.classic.filter.LevelFilter&quot;&gt;</span><br><span class="line">            &lt;level&gt;ERROR&lt;/level&gt;</span><br><span class="line">            &lt;!--上下两句的意思是： 如果检测出错误(上句)就拒绝写入输出(下句);如果没有匹配带错误,就写书--&gt;</span><br><span class="line">            &lt;onMatch&gt;DENY&lt;/onMatch&gt;</span><br><span class="line">            &lt;onMismatch&gt;ACCEPT&lt;/onMismatch&gt;</span><br><span class="line">        &lt;/filter&gt;</span><br><span class="line">    &lt;/appender&gt;</span><br><span class="line"></span><br><span class="line">    &lt;appender name=&quot;errorLog&quot;</span><br><span class="line">              class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&gt;</span><br><span class="line">        &lt;rollingPolicy class=&quot;ch.qos.logback.core.rolling.TimeBasedRollingPolicy&quot;&gt;</span><br><span class="line">            &lt;FileNamePattern&gt;$&#123;LOG_HOME&#125;/web.error.%d&#123;yyyy-MM-dd&#125;.log</span><br><span class="line">            &lt;/FileNamePattern&gt;</span><br><span class="line">            &lt;MaxHistory&gt;30&lt;/MaxHistory&gt;</span><br><span class="line">        &lt;/rollingPolicy&gt;</span><br><span class="line">        &lt;triggeringPolicy class=&quot;ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&quot;&gt;</span><br><span class="line">            &lt;maxFileSize&gt;10MB&lt;/maxFileSize&gt;</span><br><span class="line">        &lt;/triggeringPolicy&gt;</span><br><span class="line">        &lt;layout class=&quot;ch.qos.logback.classic.PatternLayout&quot;&gt;</span><br><span class="line">            &lt;pattern&gt;%d&#123;HH:mm:ss.SSS&#125; [%thread] %-5level %logger&#123;16&#125; - %msg%n</span><br><span class="line">            &lt;/pattern&gt;</span><br><span class="line">        &lt;/layout&gt;</span><br><span class="line">        &lt;filter class=&quot;ch.qos.logback.classic.filter.LevelFilter&quot;&gt;</span><br><span class="line">            &lt;level&gt;ERROR&lt;/level&gt;</span><br><span class="line">            &lt;onMatch&gt;ACCEPT&lt;/onMatch&gt;</span><br><span class="line">            &lt;onMismatch&gt;DENY&lt;/onMismatch&gt;</span><br><span class="line">        &lt;/filter&gt;</span><br><span class="line">    &lt;/appender&gt;</span><br><span class="line"></span><br><span class="line">    &lt;!--表示 com.coder520.recovermamabike 这个目录下的所有输出全部放到 normalLog errorLog 这两个分类里面--&gt;</span><br><span class="line">    &lt;logger name=&quot;com.smallkk.recovermamabike&quot; level=&quot;debug&quot;&gt;</span><br><span class="line">        &lt;appender-ref ref=&quot;normalLog&quot;/&gt;</span><br><span class="line">        &lt;appender-ref ref=&quot;errorLog&quot;/&gt;</span><br><span class="line">    &lt;/logger&gt;</span><br><span class="line">    &lt;!--PS：此处可以分DAO层，Controller层，分各种层来分别输出--&gt;</span><br><span class="line"></span><br><span class="line">    &lt;root level=&quot;info&quot;&gt;</span><br><span class="line">        &lt;appender-ref ref=&quot;Console&quot;/&gt;</span><br><span class="line">    &lt;/root&gt;</span><br><span class="line">&lt;/configuration&gt;</span><br></pre></td></tr></table></figure>

      
    </div>
    
    
    

    

    

    

    <footer class="post-footer">
      

      
      
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/2018/02/28/RecoverMaMaBike/" rel="next" title="PublicBike">
                <i class="fa fa-chevron-left"></i> PublicBike
              </a>
            
          </div>

          <span class="post-nav-divider"></span>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/2018/03/11/zookeeper/" rel="prev" title="zookeeper">
                zookeeper <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </div>
  
  
  
  </article>



    <div class="post-spread">
      
    </div>
  </div>


          </div>
          


          

  



        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    
    <div class="sidebar-inner">

      

      

      <section class="site-overview-wrap sidebar-panel sidebar-panel-active">
        <div class="site-overview">
          <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
            
              <p class="site-author-name" itemprop="name">S-Name Small·kk</p>
              <p class="site-description motion-element" itemprop="description">开源 | Java | 个人笔记 | 我的博客</p>
          </div>

          <nav class="site-state motion-element">

            
              <div class="site-state-item site-state-posts">
              
                <a href="/archives/">
              
                  <span class="site-state-item-count">12</span>
                  <span class="site-state-item-name">日志</span>
                </a>
              </div>
            

            

            

          </nav>

          

          

          
          

          
          

          

        </div>
      </section>

      

      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright">&copy; <span itemprop="copyrightYear">2018</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">S-Name Small·kk</span>

  
</div>


  <div class="powered-by">由 <a class="theme-link" target="_blank" href="https://hexo.io">Hexo</a> 强力驱动</div>



  <span class="post-meta-divider">|</span>



  <div class="theme-info">主题 &mdash; <a class="theme-link" target="_blank" href="https://github.com/iissnan/hexo-theme-next">NexT.Pisces</a> v5.1.4</div>




        







        
      </div>
    </footer>

    
      <div class="back-to-top">
        <i class="fa fa-arrow-up"></i>
        
      </div>
    

    

  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>









  












  
  
    <script type="text/javascript" src="/lib/jquery/index.js?v=2.1.3"></script>
  

  
  
    <script type="text/javascript" src="/lib/fastclick/lib/fastclick.min.js?v=1.0.6"></script>
  

  
  
    <script type="text/javascript" src="/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>
  

  
  
    <script type="text/javascript" src="/lib/velocity/velocity.min.js?v=1.2.1"></script>
  

  
  
    <script type="text/javascript" src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>
  

  
  
    <script type="text/javascript" src="/lib/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>
  


  


  <script type="text/javascript" src="/js/src/utils.js?v=5.1.4"></script>

  <script type="text/javascript" src="/js/src/motion.js?v=5.1.4"></script>



  
  


  <script type="text/javascript" src="/js/src/affix.js?v=5.1.4"></script>

  <script type="text/javascript" src="/js/src/schemes/pisces.js?v=5.1.4"></script>



  
  <script type="text/javascript" src="/js/src/scrollspy.js?v=5.1.4"></script>
<script type="text/javascript" src="/js/src/post-details.js?v=5.1.4"></script>



  


  <script type="text/javascript" src="/js/src/bootstrap.js?v=5.1.4"></script>



  


  




	





  





  












  





  

  

  

  
  

  

  

  

</body>
</html>
